Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
GetPassMask v1.0b - GetPassMask_v1.0.c

GetPassMask_v1.0.c

Caricato da:
Scarica il programma completo

  1. /*
  2. GetPassMask v1.0b
  3. -----------------
  4. c0der: cH!cus
  5. eMail: thechicus@gmail.com
  6. Data: 29 Marzo 2006
  7.  
  8. DESCRIZIONE: Il programma è un'esempio di come programmare un campo password mascherato in
  9.                          linguaggio C. C'e' una discreta se non ottimale (almeno x ora mi sembra) gestione
  10.                          dei backspaces, lunghezze massime e minime, asterischi ecc... Questo per evitare
  11.                          bugs.
  12.  
  13. La funzione è freeware. Siete liberi di ridistribuirla, modificarla e/o implementarla nei vostri
  14. programmi. Se implementata vorrei essere citato nei credits del programma, magari anche con un
  15. link al mio sito.
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21.  
  22. void credits();
  23. void GetPassMask(int nMaxLenght,  char *szBuffer, char cPasswordChar);
  24.  
  25. int main() {
  26.  
  27.         /* Caratteri massimi inseribili per la password */
  28.     int nLenght = 20;
  29.  
  30.         /* Si alloca la memoria dinamicamente */
  31.     char* szPassword = (char*)malloc((nLenght+1)*sizeof(char));
  32.        
  33.         /* Mostra i credits */
  34.         credits();
  35.    
  36.     printf("\nPassword (Max %d): ", nLenght);
  37.    
  38.     /* Ecco la funzione, notare il terzo parametro, indica che ogni carattere digitato sarà
  39.        coperto da un'asterisco. */
  40.     GetPassMask(nLenght, szPassword, '*');
  41.  
  42.     printf("\nPassword is: %s\n\nLenght: %d\n", szPassword, strlen(szPassword));
  43.    
  44.         /* Si disalloca la memoria usata per contenere la passoword */
  45.         free(szPassword);
  46. }
  47.  
  48. /* PARAMETRI GetPassMask:
  49.  
  50. nMaxLenght, valore intero che indica il numero di caratteri massimi inseribili durante
  51.                         l'inserimento della password cosi da avere una password limitata.
  52.  
  53. *szBuffer, puntatore a carattere (ovvero stringa) che alla fine della funzione conterrà
  54.                    la password digitata dall'utente.
  55.  
  56. cPasswordChar, carattere che indica quale carattere deve coprire la password durate la
  57.                            digitazione. Si puo' inserire l'asterisco (Es. '*' ) come avviene piu
  58.                            comunamente per le password, ma si puo' usare qualsiasi altro carattere
  59.                            come il cancelletto (Es. '#'). Se questo parametro è 0 allora durante la
  60.                            digitazione della password si avrà una modalità di inserimento piu "UNIX
  61.                            Like". Sarà come su UNIX, infatti in quest'ultimo OS le password per
  62.                            motivi di sicurezza non si vedono mentre vengono digitate (questo per non
  63.                            far vedere la lunghezza della password).
  64. */
  65. void GetPassMask(int nMaxLenght, char *szBuffer, char cPasswordChar) {
  66.        char cPw;
  67.        int i = 0;    
  68.  
  69.        do {
  70.                         /* Cattura il tasto premuto e lo memorizza in pw */
  71.             cPw = getch();                                      
  72.            
  73.             /* Se il numero di caratteri è minore di zero il numero dei caratteri è zero */
  74.             if (i < 0) i = 0;                                  
  75.            
  76.             /* Se i è maggiore della lunghezza massima consentita allora i = lunghezza massima */            
  77.             if (i > (nMaxLenght)) i = nMaxLenght;                      
  78.            
  79.             /* Se il tasto premuto NON è INVIO... */
  80.             if (cPw != '\r') {                                  
  81.                
  82.                /* Se il tasto premuto è il backspace... */    
  83.                if (cPw == '\b') {    
  84.                                    
  85.                    /* Se cPasswordChar è diverso da 0 cancella un'asterisco */                                        
  86.                    if(cPasswordChar != 0) if (i > 0) putch('\b'); putch(' '); putch('\b');
  87.                    
  88.                                    /* Decrementa i per non contare il carattere backspace */
  89.                    i--;
  90.                } else {                      
  91.                    
  92.                                    /* Inserisce il carattere nel buffer e incrementa la lunghezza */                                                      
  93.                    szBuffer[i++] = cPw;
  94.                    if (i <= nMaxLenght)                                            
  95.                                            if(cPasswordChar != 0) putch(cPasswordChar);
  96.                }
  97.                         }
  98.        /* Con la pressione di INVIO finisce l'inserimento della password */            
  99.        } while (cPw != '\r');
  100.        
  101.            /* Inserisce il NULL nell'ultima posizione di buffer per indicare la fine della stringa */
  102.        szBuffer[i] = '\0';
  103. }
  104.  
  105. void credits() {
  106.      printf("# GetPassMask v1.0b - c0ded by cHicus - http://thechicus.nigx.net\n"
  107.                         "# Visit also http://www.pierotofy.it, The Piero Tofy's Programmers Community!\n");
  108. }